package main

import (
	"fmt"
	"math"
)

type J interface {
	M()
}

type K struct {
	S string
}
func (k *K) M() {
	fmt.Println(k.S)
}

type F float64
func (f F) M(){
	fmt.Println(f)
}

func main() {
	var j J
	j = &K{"hello"}
	describe(j)

	j = F(math.Pi)
	describe(j)

	j.M()
}

func describe(j J) {
	fmt.Printf("---> %v, %T \n",j,j)
}